home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / wbcontrolloop.s < prev    next >
Text File  |  1997-01-31  |  48KB  |  2,476 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'AB3D1:includes/titlescrnraw',0
  39.  even
  40. TITLESCRNNAME2: dc.b 'AB3D2:includes/titlescrnraw1',0
  41.  even
  42. OPTSPRADDR: dc.l 0
  43.  
  44.  
  45.  
  46. ProtValA: dc.l 0
  47. ProtValB: dc.l 0
  48. ProtValC: dc.l 0
  49. ProtValD: dc.l 0
  50. ProtValE: dc.l 0
  51. ProtValF: dc.l 0
  52. ProtValG: dc.l 0
  53. ProtValH: dc.l 0
  54. ProtValI: dc.l 0
  55. ProtValJ: dc.l 0
  56. ProtValK: dc.l 0
  57. ProtValL: dc.l 0
  58. ProtValM: dc.l 0
  59. ProtValN: dc.l 0
  60.  
  61.  
  62. KVALTOASC:
  63.         Dc.b    " `  "," 1  "," 2  "," 3  "
  64.         dc.b    " 4  "," 5  "," 6  "," 7  "
  65.         dc.b    " 8  "," 9  "
  66. ; 10
  67.         Dc.b    " 0  "," -  "," +  "," \  "
  68.         dc.b     '    ','    '," Q  "," W  "
  69.         dc.b    " E  "," R  "
  70. ; 20
  71.         Dc.b    " T  "," Y  "," U  "," I  "
  72.         dc.b    " O  "," P  "," [  "," ]  "
  73.         dc.b    '    ','KP1 '
  74. ; 30
  75.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  76.         dc.b    " D  "," F  "," G  "," H  "
  77.         dc.b    " J  "," K  "
  78. ;40
  79.         Dc.b    " L  "," ;  "," #  ",'    '
  80.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  81.         dc.b    '    '," Z  "
  82. ;50
  83.         Dc.b    " X  "," C  "," V  "," B  "
  84.         dc.b    " N  "," M  "," ,  "," .  "
  85.         dc.b     " /  ",'    '
  86. ;60
  87.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  88.         dc.b    'SPC ','<-- ','TAB ','ENT '
  89.         dc.b    'RTN ','ESC '
  90. ;70
  91.         Dc.b    'DEL ','    ','    ','    '
  92.         dc.b    'KP- ','    ','UCK ','DCK '
  93.         dc.b    'RCK ','LCK '
  94. ;80
  95.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  96.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  97.         dc.b    'FK9 ','FK0 '
  98. ;90
  99.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  100.         dc.b    'KP+ ','HLP ','LSH ','RSH '
  101.         dc.b    'CPL ','CTL '
  102. ;100
  103.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  104.         dc.b    '    ','    ','    ','    '
  105.         dc.b    '    ','    '
  106.         Dc.b    '    ','    ','    ','    '
  107.         dc.b    '    ','    ','    ','    '
  108.         dc.b    '    ','    '
  109.  
  110.  even
  111.  
  112. FINISHEDLEVEL: dc.w 0
  113.  
  114.  
  115. START:
  116.  
  117.  move.b #'n',mors  
  118.  
  119. ************************************88
  120. * TAKE OUT WHEN PLAYING MODULE AGAIN
  121. ********************************
  122. ProtChkBLev1:
  123.     PRSDF
  124.     PRSDE
  125. ************************************
  126.  
  127. ; move.l #PROTCALLENC,a0
  128. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  129. ; move.l #$75055345,d0
  130. ;codeitup:
  131. ; sub.l d0,(a0)+
  132. ; ror.l #1,d0
  133. ; dbra d1,codeitup
  134. ; rts
  135.  
  136.  jsr Open256Screen
  137.  
  138. ProtChkCLev1:
  139.  PRSDA
  140.  
  141. ; move.w #$7201,titleplanes
  142.  
  143.  move.l 4.w,a6
  144.  move.l #doslibname,a1
  145.  moveq #0,d0
  146.  jsr -552(a6)
  147.  move.l d0,doslib
  148.  PRSDS
  149. ; jsr stuff
  150.  
  151.  jsr _InitLowLevel
  152.  
  153. ; jsr CLEARTITLEPAL
  154.  
  155. ProtChkDLev1:
  156.  PRSDT
  157.  
  158. ; move.w #$20,$dff1dc
  159. ; move.l #titlecop,$dff080
  160.  PRSDV
  161. ; move.w #$87c0,$dff000+dmacon
  162. ; move.w #$8020,$dff000+dmacon
  163. ProtChkMLev1:
  164.  move.w $dff006,d0
  165.  lea RVAL2-100(pc),a0
  166.  add.w d0,100(a0)
  167.  
  168.  bsr GETTITLEMEM
  169. ProtChkELev1:
  170.  PRSDU
  171. ; bsr CLROPTSCRN
  172.  
  173. ; bsr SETUPTITLESCRN
  174.  
  175. ; jsr _InitPlayer
  176.  
  177. ; move.l #INTROTUNENAME,a0
  178. ; jsr _LoadModule
  179. ; move.l d0,INTROTUNEADDR
  180.  PRSDY
  181. ; move.l d0,a0
  182. ; jsr _InitModule
  183.  
  184. ; move.l INTROTUNEADDR,a0
  185. ; jsr _PlayModule
  186. ProtChkFLev1:
  187.  PRSDa
  188. ; bsr LOADTITLESCRN2
  189.  
  190.  FLASHER $0f0,$fff
  191.  
  192.  move.w #0,FADEVAL
  193.  move.w #63,FADEAMOUNT
  194.  bsr FADEUPTITLE
  195.  PRSDB
  196.  jsr LOADWALLS
  197.  jsr LOADFLOOR
  198.  jsr LOADOBS
  199.  PRSDZ
  200.  
  201.  move.w #31,FADEAMOUNT
  202.  PRSDC
  203.  bsr FADEDOWNTITLE 
  204.  
  205. ; IFEQ CD32VER 
  206. ; bsr ASKFORDISK
  207. ; ENDC
  208. ; IFNE CD32VER
  209.  PRSDD
  210. ; ENDC
  211.  
  212.  jsr LOAD_SFX
  213. ; jsr _StopPlayer
  214.  PRSDW
  215.  PRSDX
  216. ; jsr _RemPlayer
  217.  
  218.  
  219.  IFNE CD32VER
  220.  move.l doslib,a6
  221.  move.l #115,d1
  222.  jsr -198(a6)
  223.  ENDC
  224.  
  225. ; move.l #newblag,$80
  226. ; trap #0
  227. ; bra JUMPPASTIT
  228. ; rts
  229. ;
  230. ;newblag:
  231.  
  232.  
  233. ProtChkGLev1:
  234. ; bsr PROTSETUP
  235.  bsr DEFAULTGAME
  236.  
  237. ; move.l INTROTUNEADDR,a0
  238. ; jsr _UnLoadModule
  239.  
  240. ; IFEQ CD32VER
  241. ; jsr KInt_Init
  242. ; ENDC
  243. ProtChkHLev1:
  244. ; rte
  245. ;
  246. ;JUMPPASTIT:
  247.  
  248. BACKTOMENU:
  249.  
  250.  jsr CLEARKEYBOARD
  251.  
  252. ; cmp.b #'s',mors
  253. ; beq.s BACKTOSLAVE
  254. ; cmp.b #'m',mors
  255. ; beq.s BACKTOMASTER
  256. ; bsr READMAINMENU
  257. ; bra DONEMENU
  258. ;BACKTOMASTER:
  259. ; bsr MASTERMENU
  260. ; bra DONEMENU
  261. ;BACKTOSLAVE:
  262. ; bsr SLAVEMENU
  263. ;DONEMENU:
  264.  
  265.  
  266.  bsr WAITREL
  267.  
  268. ; IFEQ CD32VER
  269. ; move.l OLDKINT,$68.w
  270. ; ENDC
  271.  
  272.  bsr CLRSPRITES
  273.  
  274.  move.w #31,FADEAMOUNT
  275.  bsr FADEUPTITLE
  276.  move.w #63,FADEAMOUNT
  277.  bsr FADEDOWNTITLE
  278.  
  279.  move.w #$0201,titleplanes
  280.  
  281.     FILTER
  282.     
  283.  tst.b SHOULDQUIT
  284.  bne QUITTT
  285.  
  286.  bsr RELEASETITLEMEM
  287.  
  288.   
  289. ; jsr LOADBOTPIC
  290.  
  291.   
  292.  clr.b FINISHEDLEVEL
  293.  
  294.  move.w #0,PLR1s_angpos
  295.  move.w #0,PLR2s_angpos
  296.  move.w #0,PLR1_angpos
  297.  move.w #0,PLR2_angpos
  298.  move.b #0,PLR1_GunSelected
  299.  move.b #0,PLR2_GunSelected
  300.  
  301. **************************8
  302.  clr.b NASTY
  303. *************************** 
  304.  
  305.  
  306.     jsr PLAYTHEGAME
  307.  
  308. ; bsr FREEBOTMEM 
  309.  
  310. ; bra QUITTT
  311.  
  312.  tst.b FINISHEDLEVEL
  313.  beq dontusestats
  314.  bsr CALCPASSWORD
  315. dontusestats:
  316.  bsr PASSLINETOGAME
  317.  bsr GETSTATS
  318.  
  319.  bsr GETTITLEMEM
  320. ; bsr CLROPTSCRN
  321. ; bsr SETUPTITLESCRN
  322.  
  323. ; bsr LOADTITLESCRN2
  324. ; move.w #$7201,titleplanes
  325.  
  326. ; move.w #$20,$dff1dc
  327. ; move.l #titlecop,$dff080
  328. ; move.w #$87c0,$dff000+dmacon
  329. ; move.w #$8020,$dff000+dmacon 
  330.  
  331.  move.w #0,FADEVAL
  332.  move.w #63,FADEAMOUNT
  333.  bsr FADEUPTITLE
  334.  
  335.  move.w #31,FADEAMOUNT
  336.  bsr FADEDOWNTITLE 
  337.  
  338. ; IFEQ CD32VER
  339. ; jsr KInt_Init
  340. ; ENDC
  341.  
  342.  bra BACKTOMENU
  343.  
  344. QUITTT:
  345.  
  346.  move.l LEVELDATA,d1
  347.  move.l d1,a1
  348.  move.l #120000,d0
  349.  move.l 4.w,a6
  350.  jsr -210(a6)
  351.  
  352.  move.l TEXTSCRN,d1
  353.  move.l d1,a1
  354.  move.l #10240*2,d0
  355.  move.l 4.w,a6
  356.  jsr -210(a6)
  357.  
  358.  move.l FASTBUFFER,d1    
  359.  move.l #2*320*256,d0
  360.  move.l 4.w,a6
  361.  jsr -210(a6)
  362.  
  363.  jsr RELEASEWALLMEM
  364.  jsr RELEASESAMPMEM
  365.  jsr RELEASEFLOORMEM
  366.  jsr RELEASEOBJMEM
  367.   
  368.  move.l old,$dff080
  369.  move.l 4.w,a6
  370.  lea VBLANKInt,a1
  371.  moveq #INTB_COPER,d0
  372.  jsr _LVORemIntServer(a6)
  373.  
  374.  move.l 4.w,a6
  375.  lea KEYInt,a1
  376.  moveq #INTB_PORTS,d0
  377.  jsr _LVORemIntServer(a6)
  378.  
  379. ; move.w #$f8e,$dff1dc
  380. ;
  381. ; move.l old,$dff080
  382. ; move.w _storeint,d0
  383. ; or.w d0,$dff000+intena
  384.  
  385. ; move.l    4.w,a6
  386. ; jsr    _LVOPermit(a6)
  387.  
  388.  move.l #0,d0
  389.  
  390.  rts
  391.  
  392. SSTACK: dc.l 0
  393.  
  394. ; KEY OPTIONS:
  395. CONTROLBUFFER:
  396. turn_left_key:
  397.  dc.b $4f
  398. turn_right_key:
  399.  dc.b $4e
  400. forward_key:
  401.  dc.b $4c
  402. backward_key:
  403.  dc.b $4d
  404. fire_key:
  405.  dc.b $65
  406. operate_key:
  407.  dc.b $40
  408. run_key:
  409.  dc.b $61
  410. force_sidestep_key:
  411.  dc.b $67
  412. sidestep_left_key:
  413.  dc.b $39
  414. sidestep_right_key:
  415.  dc.b $3a
  416. duck_key:
  417.  dc.b $22
  418. look_behind_key:
  419.  dc.b $28
  420.  
  421. templeftkey: dc.b 0
  422. temprightkey: dc.b 0
  423. tempslkey: dc.b 0 
  424. tempsrkey: dc.b 0
  425.  
  426.  even 
  427.  
  428. GETSTATS:
  429. ; CHANGE PASSWORD INTO RAW DATA
  430.  
  431.  move.b PASSBUFFER,d0
  432.  and.w #$7f,d0
  433.  move.w d0,PLR1_energy
  434.  move.b PASSBUFFER+1,d0
  435.  btst #7,d0
  436.  sne PLR1_GunData+32+7
  437.  btst #6,d0
  438.  sne PLR1_GunData+32*2+7
  439.  btst #5,d0
  440.  sne PLR1_GunData+32*4+7
  441.  btst #4,d0
  442.  sne PLR1_GunData+32*7+7
  443.  and.w #%1111,d0
  444.  move.w d0,MAXLEVEL
  445.  move.b PASSBUFFER+2,d0
  446.  and.w #$7f,d0
  447.  lsl.w #3,d0
  448.  move.w d0,PLR1_GunData
  449.  move.b PASSBUFFER+3,d0
  450.  and.w #$7f,d0
  451.  lsl.w #3,d0
  452.  move.w d0,PLR1_GunData+32
  453.  move.b PASSBUFFER+4,d0
  454.  and.w #$7f,d0
  455.  lsl.w #3,d0
  456.  move.w d0,PLR1_GunData+32*2
  457.  move.b PASSBUFFER+5,d0
  458.  and.w #$7f,d0
  459.  lsl.w #3,d0
  460.  move.w d0,PLR1_GunData+32*4
  461.  move.b PASSBUFFER+6,d0
  462.  and.w #$7f,d0
  463.  lsl.w #3,d0
  464.  move.w d0,PLR1_GunData+32*7
  465.  rts
  466.  
  467.  
  468. SETPLAYERS:
  469.  
  470.  move.w PLOPT,d0
  471.  add.b #'a',d0
  472.  move.b d0,LEVA
  473.  move.b d0,LEVB
  474.  move.b d0,LEVC
  475.  move.b d0,LEVD
  476.  
  477.  cmp.b #'s',mors
  478.  beq SLAVESETUP
  479.  cmp.b #'m',mors
  480.  beq MASTERSETUP
  481.  st NASTY
  482. onepla:
  483.  rts
  484.  
  485. NASTY: dc.w 0
  486.  
  487. MASTERSETUP:
  488.  bsr TWOPLAYER
  489.  clr.b NASTY
  490.  move.w PLOPT,d0
  491.  jsr SENDFIRST
  492.  rts
  493.  
  494. SLAVESETUP:
  495.  bsr TWOPLAYER
  496.  CLR.B NASTY
  497.  jsr RECFIRST
  498.  move.w d0,PLOPT
  499.  add.b #'a',d0
  500.  move.b d0,LEVA
  501.  move.b d0,LEVB
  502.  move.b d0,LEVC
  503.  rts
  504.      
  505. ********************************************************
  506.  
  507. ASKFORDISK:
  508.  lea RVAL1+300(pc),a0
  509.  lea RVAL2+900(pc),a1
  510.  PRSDD
  511.  move.w #3,OptScrn
  512.  bsr DRAWOPTSCRN
  513.  
  514. ProtChkNLev1:
  515. .wtrel:
  516.  btst #7,$bfe001
  517.  beq.s .wtrel
  518.  
  519. wtclick:
  520.  add.w #$235,-300(a0)
  521.  add.w #$4533,-900(a0)
  522.  btst #6,$bfe001
  523.  bne.s wtclick
  524.  
  525.  rts
  526.  
  527. CLRSPRITES: 
  528.  move.l #nullspr,d0
  529.  move.w d0,tsp0l
  530.  move.w d0,tsp1l
  531.  move.w d0,tsp2l
  532.  move.w d0,tsp3l
  533.  move.w d0,tsp4l
  534.  move.w d0,tsp5l
  535.  move.w d0,tsp6l
  536.  move.w d0,tsp7l
  537.  swap d0
  538.  move.w d0,tsp0h
  539.  move.w d0,tsp1h
  540.  move.w d0,tsp2h
  541.  move.w d0,tsp3h
  542.  move.w d0,tsp4h
  543.  move.w d0,tsp5h
  544.  move.w d0,tsp6h
  545.  move.w d0,tsp7h 
  546.  rts
  547.  
  548. ********************************************************
  549.  
  550. READMAINMENU:
  551.  
  552.  
  553.  move.b #'n',mors
  554.  
  555.  move.w MAXLEVEL,d0
  556.  
  557.  move.l #CURRENTLEVELLINE,a1
  558.  muls #40,d0
  559.  move.l #LEVEL_OPTS,a0
  560.  add.l d0,a0
  561.  bsr PUTINLINE
  562.  
  563.  
  564.  
  565. ; Stay here until 'play game' is selected.
  566.  
  567.  move.w #0,OptScrn
  568.  bsr DRAWOPTSCRN
  569.  move.w #1,OPTNUM
  570.  
  571.  bsr HIGHLIGHT
  572.  
  573.  
  574.  
  575.  bsr WAITREL
  576. .rdlop:
  577.  
  578.  bsr CHECKMENU
  579.  tst.w d0
  580.  blt.s .rdlop
  581.  
  582.  bne .noopt
  583.  
  584.  bra MASTERMENU
  585.  
  586. .noopt:
  587.  
  588.  cmp.w #5,d0
  589.  bne.s .noqui
  590.  st SHOULDQUIT
  591.  bra playgame
  592. .noqui
  593.  
  594.  cmp.w #1,d0
  595.  beq playgame
  596.  
  597.  cmp.w #2,d0
  598.  bne .nocontrol
  599.  
  600.  bsr CHANGECONTROLS
  601.  
  602.  move.w #0,OptScrn
  603.  bsr DRAWOPTSCRN
  604.  move.w #0,OPTNUM
  605.  
  606.  bsr HIGHLIGHT
  607.  
  608.  bsr WAITREL
  609.  bra .rdlop
  610.  
  611. .nocontrol:
  612.  
  613.  cmp.w #3,d0
  614.  bne .nocred
  615.  bsr SHOWCREDITS
  616.  move.w #0,OptScrn
  617.  bsr DRAWOPTSCRN
  618.  move.w #1,OPTNUM
  619.  
  620.  bsr HIGHLIGHT
  621.  
  622.  bsr WAITREL
  623.  bra .rdlop
  624.  
  625.  
  626. .nocred:
  627.  
  628.  cmp.w #4,d0
  629.  bne playgame
  630.  bsr WAITREL
  631.  
  632.  move.l #PASSWORDLINE+12,a0
  633.  moveq #15,d2
  634. .clrline:
  635.  move.b #32,(a0)+
  636.  dbra d2,.clrline 
  637.  move.w #0,OptScrn
  638.  bsr DRAWOPTSCRN
  639.  
  640.  IFEQ CD32VER
  641.  clr.b lastpressed
  642.  move.l #PASSWORDLINE+12,a0
  643.  move.w #0,d1
  644. .ENTERPASS:
  645.  tst.b lastpressed
  646.  beq .ENTERPASS
  647.  move.b lastpressed,d2
  648.  move.b #0,lastpressed
  649.  move.l #KVALTOASC,a1
  650.  
  651.  cmp.l #'<-- ',(a1,d2.w*4)
  652.  bne .nodel
  653.  
  654.  tst.b d1
  655.  beq .nodel
  656.  
  657.  subq #1,d1
  658.  move.b #32,-(a0)
  659.  movem.l d0-d7/a0-a6,-(a7)
  660.  bsr JUSTDRAWIT
  661.  movem.l (a7)+,d0-d7/a0-a6
  662.  bra .ENTERPASS
  663.  
  664. .nodel:
  665.  
  666.  cmp.l #'RTN ',(a1,d2.w*4)
  667.  beq .FORGETIT
  668.  cmp.l #'ESC ',(a1,d2.w*4)
  669.  beq .FORGETIT
  670.  move.b 1(a1,d2.w*4),d2
  671.  cmp.b #65,d2
  672.  blt .ENTERPASS
  673.  cmp.b #'Z',d2
  674.  bgt .ENTERPASS
  675.  move.b d2,(a0)+
  676.  move.w #0,OptScrn
  677.  movem.l d0-d7/a0-a6,-(a7)
  678.  bsr JUSTDRAWIT
  679.  movem.l (a7)+,d0-d7/a0-a6
  680.  add.w #1,d1
  681.  cmp.w #16,d1
  682.  blt .ENTERPASS
  683.  
  684.  ENDC
  685.  IFNE CD32VER
  686.  move.l #PASSWORDLINE+12,a0
  687.  move.w #15,d0
  688. .ENTERPASS:
  689.  bsr GETACHAR
  690.  dbra d0,.ENTERPASS
  691.  ENDC
  692.  
  693.  bsr PASSLINETOGAME
  694.  tst.w d0
  695.  bne .FORGETIT
  696.  
  697.  bsr GETSTATS
  698.  move.w MAXLEVEL,d0
  699.  move.l #CURRENTLEVELLINE,a1
  700.  muls #40,d0
  701.  move.l #LEVEL_OPTS,a0
  702.  add.l d0,a0
  703.  bsr PUTINLINE
  704.  
  705. .FORGETIT:
  706.  bsr WAITREL
  707.  bsr CALCPASSWORD
  708.  
  709.  move.w #0,OptScrn
  710.  bsr DRAWOPTSCRN
  711.  
  712.  move.w #1,OPTNUM
  713.  
  714.  bsr HIGHLIGHT
  715.  
  716.  bra .rdlop 
  717.  
  718. playgame:
  719.  move.w MAXLEVEL,PLOPT
  720.  rts
  721.  
  722. SHOULDQUIT: dc.w 0
  723.  
  724. LEVELSELECTED:
  725.  dc.w 0
  726.  
  727.  IFNE CD32VER
  728. GETACHAR:
  729.  moveq #0,d7
  730.  move.b #'A',(a0)
  731.  movem.l d0-d7/a0-a6,-(a7)
  732.  jsr JUSTDRAWIT
  733.  movem.l (a7)+,d0-d7/a0-a6
  734.  
  735. .wtnum:
  736.  btst #1,$dff00c
  737.  sne d1
  738.  btst #1,$dff00d
  739.  sne d2
  740.  btst #0,$dff00c
  741.  sne d3
  742.  btst #0,$dff00d
  743.  sne d4
  744.  
  745.  eor.b d1,d3
  746.  eor.b d2,d4
  747.  
  748.  tst.b d1
  749.  beq.s .NODELETE
  750.  cmp.w #15,d0
  751.  beq.s .NODELETE
  752.  move.b #32,(a0)
  753.  subq #1,a0
  754.  addq #1,d0
  755.  move.b (a0),d7
  756.  sub.b #'A',d7
  757.  movem.l d0-d7/a0-a6,-(a7)
  758.  jsr JUSTDRAWIT
  759.  movem.l (a7)+,d0-d7/a0-a6
  760.  jsr WAITFORNOPRESS
  761.  bra .wtnum
  762. .NODELETE
  763.  
  764.  tst.b d4
  765.  bne.s .PREVNUM
  766.  tst.b d3
  767.  bne.s .NEXTNUM
  768.  btst #7,$bfe001
  769.  bne.s .wtnum
  770.  addq #1,a0
  771.  jsr WAITFORNOPRESS
  772.  rts
  773.  
  774. .PREVNUM:
  775.  subq #1,d7
  776.  bge.s .nonegg
  777.  moveq #15,d7
  778. .nonegg:
  779.  move.b d7,d1
  780.  add.b #'A',d1
  781.  move.b d1,(a0)
  782.  movem.l d0-d7/a0-a6,-(a7)
  783.  jsr JUSTDRAWIT
  784.  movem.l (a7)+,d0-d7/a0-a6
  785.  
  786.  jsr WAITFORNOPRESS
  787.  
  788.  bra .wtnum
  789.  
  790. .NEXTNUM:
  791.  addq #1,d7
  792.  cmp.w #15,d7
  793.  ble.s .nobigg
  794.  moveq #0,d7
  795. .nobigg:
  796.  move.b d7,d1
  797.  add.b #'A',d1
  798.  move.b d1,(a0)
  799.  movem.l d0-d7/a0-a6,-(a7)
  800.  jsr JUSTDRAWIT
  801.  movem.l (a7)+,d0-d7/a0-a6
  802.  jsr WAITFORNOPRESS
  803.  bra .wtnum
  804.  rts
  805.  ENDC
  806.  
  807.  
  808. MASTERMENU:
  809.  
  810.  move.b #'m',mors
  811.  
  812.  move.w #0,LEVELSELECTED
  813.  
  814.  move.w #0,d0 
  815.  move.l #CURRENTLEVELLINEM,a1
  816.  muls #40,d0
  817.  move.l #LEVEL_OPTS,a0
  818.  add.l d0,a0
  819.  bsr PUTINLINE
  820.  
  821. ; Stay here until 'play game' is selected.
  822.  
  823.  move.w #4,OptScrn
  824.  bsr DRAWOPTSCRN
  825.  move.w #1,OPTNUM
  826.  
  827.  bsr HIGHLIGHT
  828.  
  829.  bsr WAITREL
  830. .rdlop:
  831.  bsr CHECKMENU
  832.  tst.w d0
  833.  blt.s .rdlop
  834.  bsr WAITREL
  835.  
  836.  cmp.w #1,d0
  837.  bne.s .nonextlev
  838.  
  839.  move.w LEVELSELECTED,d0
  840.  add.w #1,d0
  841.  cmp.w MAXLEVEL,d0
  842.  blt .nowrap
  843.  moveq #0,d0
  844. .nowrap:
  845.  move.w d0,LEVELSELECTED
  846.  move.l #CURRENTLEVELLINEM,a1
  847.  muls #40,d0
  848.  move.l #LEVEL_OPTS,a0
  849.  add.l d0,a0
  850.  bsr PUTINLINE
  851.  bsr JUSTDRAWIT
  852.  bra .rdlop
  853.  
  854. .nonextlev:
  855.  cmp.w #2,d0
  856.  beq .playgame
  857.  
  858.  cmp.w #0,d0
  859.  bne .noopt
  860.  
  861.  bra SLAVEMENU
  862.  
  863. .noopt:
  864.  
  865.  cmp.w #3,d0
  866.  bne .nocontrol
  867.  
  868.  bsr CHANGECONTROLS
  869.  
  870.  move.w #4,OptScrn
  871.  bsr DRAWOPTSCRN
  872.  move.w #0,OPTNUM
  873.  
  874.  bsr HIGHLIGHT
  875.  
  876.  bsr WAITREL
  877.  bra .rdlop
  878.  
  879. .nocontrol:
  880.  
  881. .playgame
  882.  
  883.  move.w LEVELSELECTED,PLOPT
  884.  rts
  885.  
  886. SLAVEMENU:
  887.  
  888.  move.b #'s',mors
  889.  
  890. ; Stay here until 'play game' is selected.
  891.  
  892.  move.w #5,OptScrn
  893.  bsr DRAWOPTSCRN
  894.  move.w #1,OPTNUM
  895.  
  896.  bsr HIGHLIGHT
  897.  
  898.  bsr WAITREL
  899. .rdlop:
  900.  bsr CHECKMENU
  901.  tst.w d0
  902.  blt.s .rdlop
  903.  bsr WAITREL
  904.  
  905.  cmp.w #1,d0
  906.  beq .playgame
  907.  
  908.  cmp.w #0,d0
  909.  bne .noopt
  910.  
  911.  bra READMAINMENU
  912.  
  913. .noopt:
  914.  
  915.  cmp.w #2,d0
  916.  bne .nocontrol
  917.  
  918.  bsr CHANGECONTROLS
  919.  
  920.  move.w #0,OptScrn
  921.  bsr DRAWOPTSCRN
  922.  move.w #0,OPTNUM
  923.  
  924.  bsr HIGHLIGHT
  925.  
  926.  bsr WAITREL
  927.  bra .rdlop
  928.  
  929. .nocontrol:
  930. .playgame:
  931.  
  932.  rts
  933.  
  934. TWOPLAYER:
  935.  move.w #0,OldEnergy
  936.  move.w #127,Energy
  937.  jsr EnergyBar
  938.  
  939.  move.w #63,OldAmmo
  940.  move.w #0,Ammo
  941.  jsr AmmoBar
  942.  move.w #0,OldAmmo
  943.  
  944.  move.w #127,PLR1_energy
  945.  move.w #127,PLR2_energy 
  946.  move.w #160,PLR1_GunData    ; 10 shots pistol
  947.  st PLR1_GunData+7
  948.  
  949.  st.b PLR1_GunData+32+7
  950.  move.w #80*4,PLR1_GunData+32
  951.  
  952.  st.b PLR1_GunData+64+7
  953.  move.w #80*4,PLR1_GunData+64
  954.  
  955.  st.b PLR1_GunData+32*3+7
  956.  move.w #80*4,PLR1_GunData+32*3
  957.  
  958.  st.b PLR1_GunData+32*4+7
  959.  move.w #80*4,PLR1_GunData+32*4
  960.  
  961.  st.b PLR1_GunData+32*7+7
  962.  move.w #80*4,PLR1_GunData+32*7
  963.  
  964.  move.b #0,PLR1_GunSelected
  965.  
  966.  move.w #160,PLR2_GunData    ; 10 shots pistol
  967.  st PLR2_GunData+7
  968.  st.b PLR2_GunData+32+7
  969.  move.w #80*4,PLR2_GunData+32
  970.  
  971.  st.b PLR2_GunData+64+7
  972.  move.w #80*4,PLR2_GunData+64
  973.  
  974.  st.b PLR2_GunData+32*3+7
  975.  move.w #80*4,PLR2_GunData+32*3
  976.  
  977.  st.b PLR2_GunData+32*4+7
  978.  move.w #80*4,PLR2_GunData+32*4
  979.  
  980.  st.b PLR2_GunData+32*7+7
  981.  move.w #80*4,PLR2_GunData+32*7
  982.  move.b #0,PLR2_GunSelected
  983.  rts
  984.  
  985. newdum:
  986.  rts
  987.  
  988. DEFAULTGAME:
  989.  move.w #0,MAXLEVEL
  990.  move.w #5,CHEATNUM
  991.  move.l #CHEATFRAME-200000,CHEATPTR
  992.  
  993.  move.w #0,OldEnergy
  994.  move.w #127,Energy
  995.  jsr EnergyBar
  996.  
  997.  move.w #63,OldAmmo
  998.  move.w #0,Ammo
  999.  jsr AmmoBar
  1000.  move.w #0,OldAmmo
  1001.  
  1002.  move.w #127,PLR1_energy
  1003.  move.w #127,PLR2_energy 
  1004.  move.w #160,PLR1_GunData    ; 10 shots pistol
  1005.  st PLR1_GunData+7
  1006.  clr.b PLR1_GunData+32+7
  1007.  clr.w PLR1_GunData+32
  1008.  clr.b PLR1_GunData+64+7
  1009.  clr.w PLR1_GunData+64
  1010.  clr.b PLR1_GunData+32*3+7
  1011.  clr.w PLR1_GunData+32*3
  1012.  clr.b PLR1_GunData+32*4+7
  1013.  clr.w PLR1_GunData+32*4
  1014.  clr.b PLR1_GunData+32*7+7
  1015.  clr.w PLR1_GunData+32*7
  1016.  move.b #0,PLR1_GunSelected
  1017.  
  1018. ProtChkILev1:
  1019. ************************************************
  1020. * TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
  1021. ************************************************
  1022.  
  1023.  
  1024. ************************************************
  1025.  
  1026.  move.w #160,PLR2_GunData    ; 10 shots pistol
  1027.  st PLR2_GunData+7
  1028.  clr.b PLR2_GunData+32+7
  1029.  clr.w PLR2_GunData+32
  1030.  clr.b PLR2_GunData+64+7
  1031.  clr.w PLR2_GunData+64
  1032.  clr.b PLR2_GunData+32*3+7
  1033.  clr.w PLR2_GunData+32*3
  1034.  clr.b PLR2_GunData+32*4+7
  1035.  clr.w PLR2_GunData+32*4
  1036.  clr.b PLR2_GunData+32*7+7
  1037.  clr.w PLR2_GunData+32*7
  1038.  move.b #0,PLR2_GunSelected
  1039.  
  1040.  bsr CALCPASSWORD
  1041.  
  1042.  rts
  1043.  
  1044. CHKPROT: dc.w 0
  1045.  
  1046. GETPARITY:
  1047.  move.w #6,d3
  1048. .calcparity:
  1049.  btst d3,d0
  1050.  beq.s .nochange
  1051.  bchg #7,d0
  1052. .nochange:
  1053.  dbra d3,.calcparity
  1054.  rts
  1055.  
  1056. CHECKPARITY:
  1057.  move.w #6,d3
  1058.  move.b #$0,d2
  1059. .calcparity:
  1060.  btst d3,d0
  1061.  beq.s .nochange
  1062.  bchg #7,d2
  1063. .nochange:
  1064.  dbra d3,.calcparity
  1065.  move.b d0,d1
  1066.  and.b #$80,d1
  1067.  eor.b d1,d2
  1068.  sne.s d5
  1069.  rts
  1070.  
  1071. CALCPASSWORD:
  1072.  move.b PLR1_energy+1,d0
  1073.  bsr GETPARITY
  1074.  move.b d0,PASSBUFFER
  1075.  moveq #0,d0
  1076.  tst.b PLR1_GunData+32+7
  1077.  sne d0
  1078.  lsl.w #1,d0
  1079.  tst.b PLR1_GunData+64+7
  1080.  sne d0
  1081.  lsl.w #1,d0
  1082.  tst.b PLR1_GunData+32*4+7
  1083.  sne d0
  1084.  lsl.w #1,d0
  1085.  tst.b PLR1_GunData+32*7+7
  1086.  sne d0
  1087.  lsr.w #3,d0
  1088.  and.b #%11110000,d0
  1089.  or.b MAXLEVEL+1,d0
  1090.  move.b d0,PASSBUFFER+1
  1091.  eor.b #%10110101,d0
  1092.  neg.b d0
  1093.  add.b #50,d0
  1094.  move.b d0,PASSBUFFER+7
  1095.  
  1096.  move.w PLR1_GunData,d0
  1097.  lsr.w #3,d0
  1098.  bsr GETPARITY
  1099.  move.b d0,PASSBUFFER+2
  1100.  move.w PLR1_GunData+32,d0
  1101.  lsr.w #3,d0
  1102.  bsr GETPARITY
  1103.  move.b d0,PASSBUFFER+3
  1104.  move.w PLR1_GunData+32*2,d0
  1105.  lsr.w #3,d0
  1106.  bsr GETPARITY
  1107.  move.b d0,PASSBUFFER+4
  1108.  move.w PLR1_GunData+32*4,d0
  1109.  lsr.w #3,d0
  1110.  bsr GETPARITY
  1111.  move.b d0,PASSBUFFER+5
  1112.  move.w PLR1_GunData+32*7,d0
  1113.  lsr.w #3,d0
  1114.  bsr GETPARITY
  1115.  move.b d0,PASSBUFFER+6
  1116.  
  1117.  move.w #3,d0
  1118.  move.l #PASSBUFFER,a0
  1119.  move.l #PASSBUFFER+8,a1
  1120.  move.l #PASS,a2
  1121.  moveq #0,d4
  1122. mixemup:
  1123.  move.b (a0)+,d1
  1124.  move.b -(a1),d2
  1125.  not.b d2
  1126.  moveq #0,d3
  1127.  lsr.b #1,d1
  1128.  addx.w d3,d3
  1129.  lsr.b #1,d2
  1130.  addx.w d3,d3
  1131.  lsr.b #1,d1
  1132.  addx.w d3,d3
  1133.  lsr.b #1,d2
  1134.  addx.w d3,d3
  1135.  lsr.b #1,d1
  1136.  addx.w d3,d3
  1137.  lsr.b #1,d2
  1138.  addx.w d3,d3
  1139.  lsr.b #1,d1
  1140.  addx.w d3,d3
  1141.  lsr.b #1,d2
  1142.  addx.w d3,d3
  1143.  lsr.b #1,d1
  1144.  addx.w d3,d3
  1145.  lsr.b #1,d2
  1146.  addx.w d3,d3
  1147.  lsr.b #1,d1
  1148.  addx.w d3,d3
  1149.  lsr.b #1,d2
  1150.  addx.w d3,d3
  1151.  lsr.b #1,d1
  1152.  addx.w d3,d3
  1153.  lsr.b #1,d2
  1154.  addx.w d3,d3
  1155.  lsr.b #1,d1
  1156.  addx.w d3,d3
  1157.  lsr.b #1,d2
  1158.  addx.w d3,d3
  1159.  move.w d3,(a2)+
  1160.  
  1161.  dbra d0,mixemup
  1162.  
  1163.  move.l #PASSWORDLINE+12,a0
  1164.  move.l #PASS,a1
  1165.  move.w #7,d0
  1166. putinpassline:
  1167.  move.b (a1),d1
  1168.  and.b #%1111,d1
  1169.  add.b #65,d1
  1170.  move.b d1,(a0)+
  1171.  move.b (a1)+,d1
  1172.  lsr.b #4,d1
  1173.  and.b #%1111,d1
  1174.  add.b #65,d1
  1175.  move.b d1,(a0)+
  1176.  dbra d0,putinpassline
  1177.  rts
  1178.  
  1179. PASSLINETOGAME:
  1180.  move.l #PASSWORDLINE+12,a0
  1181.  move.l #PASS,a1
  1182.  move.w #7,d0
  1183. getbuff:
  1184.  move.b (a0)+,d1
  1185.  move.b (a0)+,d2
  1186.  sub.b #65,d1
  1187.  sub.b #65,d2
  1188.  and.b #%1111,d1
  1189.  and.b #%1111,d2
  1190.  lsl.b #4,d2
  1191.  or.b d2,d1
  1192.  move.b d1,(a1)+
  1193.  dbra d0,getbuff
  1194.  
  1195.  move.l #PASS,a0
  1196.  move.l #PASSBUFFER,a1
  1197.  move.l #PASSBUFFER+8,a2
  1198.  move.w #3,d0
  1199.  moveq #0,d4
  1200. unmix:
  1201.  move.w (a0)+,d1
  1202.  moveq #0,d2
  1203.  moveq #0,d3
  1204.  lsr.w #1,d1
  1205.  addx.w d3,d3
  1206.  lsr.w #1,d1
  1207.  addx.w d2,d2
  1208.  lsr.w #1,d1
  1209.  addx.w d3,d3
  1210.  lsr.w #1,d1
  1211.  addx.w d2,d2
  1212.  lsr.w #1,d1
  1213.  addx.w d3,d3
  1214.  lsr.w #1,d1
  1215.  addx.w d2,d2
  1216.  lsr.w #1,d1
  1217.  addx.w d3,d3
  1218.  lsr.w #1,d1
  1219.  addx.w d2,d2
  1220.  lsr.w #1,d1
  1221.  addx.w d3,d3
  1222.  lsr.w #1,d1
  1223.  addx.w d2,d2
  1224.  lsr.w #1,d1
  1225.  addx.w d3,d3
  1226.  lsr.w #1,d1
  1227.  addx.w d2,d2
  1228.  lsr.w #1,d1
  1229.  addx.w d3,d3
  1230.  lsr.w #1,d1
  1231.  addx.w d2,d2
  1232.  lsr.w #1,d1
  1233.  addx.w d3,d3
  1234.  lsr.w #1,d1
  1235.  addx.w d2,d2
  1236.  not.b d3
  1237.  move.b d3,-(a2)
  1238.  move.b d2,(a1)+
  1239.  dbra d0,unmix
  1240.  
  1241.  move.b PASSBUFFER,d0
  1242.  bsr CHECKPARITY
  1243.  tst.b d5
  1244.  bne illega
  1245.  move.b PASSBUFFER+2,d0
  1246.  bsr CHECKPARITY
  1247.  tst.b d5
  1248.  bne illega
  1249.  move.b PASSBUFFER+3,d0
  1250.  bsr CHECKPARITY
  1251.  tst.b d5
  1252.  bne illega
  1253.  move.b PASSBUFFER+4,d0
  1254.  bsr CHECKPARITY
  1255.  tst.b d5
  1256.  bne illega
  1257.  move.b PASSBUFFER+5,d0
  1258.  bsr CHECKPARITY
  1259.  tst.b d5
  1260.  bne illega
  1261.  move.b PASSBUFFER+6,d0
  1262.  bsr CHECKPARITY
  1263.  tst.b d5
  1264.  bne illega
  1265.  
  1266.  move.b PASSBUFFER+1,d0
  1267.  eor.b #%10110101,d0
  1268.  neg.b d0
  1269.  add.b #50,d0
  1270.  cmp.b PASSBUFFER+7,d0
  1271.  bne illega
  1272.  
  1273.  move.w #0,d0
  1274.  rts
  1275.  
  1276. illega:
  1277.  
  1278.  move.w #-1,d0
  1279.  
  1280.  rts
  1281.  
  1282. PASSBUFFER:
  1283.  ds.b 8
  1284.  
  1285. CHECKBUFFER: ds.b 8
  1286.  
  1287. PASS:
  1288.  ds.b 16
  1289.  
  1290. **************************************************
  1291.  
  1292. CHANGECONTROLS:
  1293.  
  1294.  move.w #6,OptScrn
  1295.  bsr DRAWOPTSCRN
  1296.  move.w #0,OPTNUM
  1297.  bsr HIGHLIGHT
  1298.  bsr WAITREL
  1299.  
  1300. .rdlop:
  1301.  bsr CHECKMENU
  1302.  tst.w d0
  1303.  blt.s .rdlop
  1304.  
  1305.  cmp.w #12,d0
  1306.  beq .backtomain
  1307.  
  1308.  move.l #KEY_LINES,a0
  1309.  move.w d0,d1
  1310.  muls #40,d1
  1311.  add.l d1,a0
  1312.  add.w #32,a0
  1313.  move.l #$20202020,(a0)
  1314.  movem.l d0/a0,-(a7)
  1315.  bsr JUSTDRAWIT
  1316.  movem.l (a7)+,d0/a0 
  1317.  
  1318.  clr.b lastpressed
  1319.  
  1320. .wtkey
  1321.  tst.b lastpressed
  1322.  beq .wtkey
  1323.  
  1324.  move.l #CONTROLBUFFER,a1
  1325.  moveq #0,d1
  1326.  move.b lastpressed,d1
  1327.  move.b d1,(a1,d0.w)
  1328.  move.l #KVALTOASC,a1
  1329.  move.l (a1,d1.w*4),(a0)
  1330.  bsr JUSTDRAWIT
  1331.  bsr WAITREL
  1332.  bra .rdlop
  1333.  
  1334. .backtomain:
  1335.  rts
  1336.  
  1337. **************************************************
  1338.  
  1339.  
  1340. MAXLEVEL: dc.w 0
  1341.  
  1342. SHOWCREDITS:
  1343.  move.w #2,OptScrn
  1344.  bsr DRAWOPTSCRN
  1345.  move.w #0,OPTNUM
  1346.  bsr HIGHLIGHT
  1347.  
  1348.  bsr WAITREL
  1349.  
  1350. .rdlop:
  1351.  bsr CHECKMENU
  1352.  tst.w d0
  1353.  blt.s .rdlop
  1354.  
  1355.  bra READMAINMENU
  1356.  
  1357. HELDDOWN:
  1358.  dc.w 0
  1359.  
  1360. WAITREL:
  1361.  
  1362.  movem.l d0/d1/d2/d3,-(a7)
  1363.  
  1364.  move.l #KeyMap,a5
  1365. WAITREL2:
  1366.  btst #7,$bfe001
  1367.  beq.s WAITREL2
  1368.  
  1369.  IFEQ CD32VER
  1370.  tst.b $40(a5)
  1371.  bne.s WAITREL2
  1372.  tst.b $44(a5)
  1373.  bne.s WAITREL2
  1374.  tst.b $4c(a5)
  1375.  bne.s WAITREL2
  1376.  tst.b $4d(a5)
  1377.  bne.s WAITREL2
  1378.  ENDC
  1379.  
  1380.  btst #1,$dff00c
  1381.  sne d0
  1382.  btst #1,$dff00d
  1383.  sne d1
  1384.  btst #0,$dff00c
  1385.  sne d2
  1386.  btst #0,$dff00d
  1387.  sne d3
  1388.  
  1389.  eor.b d0,d2
  1390.  eor.b d1,d3
  1391.  tst.b d2
  1392.  bne.s WAITREL2
  1393.  tst.b d3
  1394.  bne.s WAITREL2
  1395.  
  1396.  
  1397.  movem.l (a7)+,d0/d1/d2/d3
  1398.  rts
  1399.  
  1400. PUTINLINE:
  1401.  moveq #39,d0
  1402. pill
  1403.  move.b (a0)+,(a1)+
  1404.  dbra d0,pill
  1405.  rts
  1406.  
  1407. CHECKMENU:
  1408.  btst #1,$dff00c
  1409.  sne d0
  1410.  btst #1,$dff00d
  1411.  sne d1
  1412.  btst #0,$dff00c
  1413.  sne d2
  1414.  btst #0,$dff00d
  1415.  sne d3
  1416.  
  1417.  eor.b d0,d2
  1418.  eor.b d1,d3
  1419.  
  1420.  move.l #KeyMap,a5
  1421.  move.b $4c(a5),d0
  1422.  move.b $4d(a5),d1
  1423.  or.b d1,d3
  1424.  or.b d0,d2
  1425.  
  1426.  move.w OptScrn,d0
  1427.  move.l #MENUDATA,a0
  1428.  move.l 4(a0,d0.w*8),a0    ; opt data
  1429.  
  1430.  move.w OPTNUM,d0
  1431.  
  1432.  tst.b d2
  1433.  beq.s NOPREV
  1434.  
  1435.  
  1436.  sub.w #1,d0
  1437.  bge.s NOPREV
  1438.  
  1439.  move.w #0,d0 
  1440.  
  1441. NOPREV:
  1442.  
  1443.  tst.b d3
  1444.  beq.s NONEXT
  1445.  
  1446.  bsr WAITREL
  1447.  
  1448.  add.w #1,d0
  1449.  tst.w (a0,d0.w*8)
  1450.  bge.s NONEXT
  1451.  
  1452.  subq #1,d0
  1453.  
  1454. NONEXT:
  1455.  
  1456.  cmp.w OPTNUM,d0
  1457.  beq.s .nochange
  1458.  
  1459.  bsr HIGHLIGHT
  1460.  move.w d0,OPTNUM
  1461.  bsr HIGHLIGHT
  1462.  bsr WAITREL
  1463.  
  1464. .nochange:
  1465.  
  1466.  move.w #-1,d0
  1467.  
  1468.  btst #7,$bfe001
  1469.  beq.s select
  1470.  move.b $40(a5),d1
  1471.  or.b $44(a5),d1
  1472.  tst.b d1
  1473.  beq.s noselect
  1474.  
  1475. select:
  1476.  bsr WAITREL
  1477.  move.w OPTNUM,d0
  1478. noselect:
  1479.  
  1480.  rts
  1481.  
  1482. HIGHLIGHT:
  1483.  
  1484.  SAVEREGS
  1485.  
  1486.  move.w OptScrn,d0
  1487.  move.l #MENUDATA,a0
  1488.  move.l 4(a0,d0.w*8),a0
  1489.  move.w OPTNUM,d0
  1490.  lea (a0,d0.w*8),a0
  1491.  move.w (a0)+,d0    ;left
  1492.  move.w (a0)+,d1    ;top
  1493.  move.w (a0)+,d2    ;width
  1494.  
  1495.  muls #16*8,d1
  1496.  move.l OPTSPRADDR,a1
  1497.  add.w d1,a1
  1498.  add.w #8+16,a1
  1499.  move.l #SCRTOSPR2,a5
  1500.  adda.w d0,a5
  1501.  adda.w d0,a5
  1502.  
  1503. NOTLOP:
  1504.  
  1505.  move.w (a5)+,d3
  1506.  lea (a1,d3.w),a2
  1507.  not.b (a2)
  1508.  not.b 16(a2)
  1509.  not.b 32(a2)
  1510.  not.b 48(a2)
  1511.  not.b 64(a2)
  1512.  not.b 80(a2)
  1513.  not.b 96(a2)
  1514.  not.b 112(a2)
  1515.  not.b 128(a2)
  1516.  subq #1,d2
  1517.  bgt.s NOTLOP
  1518.  
  1519.  GETREGS
  1520.  rts
  1521.  
  1522. SCRTOSPR2:
  1523. val SET 0
  1524.  REPT 6
  1525.  dc.w val+0
  1526.  dc.w val+1
  1527.  dc.w val+2
  1528.  dc.w val+3
  1529.  dc.w val+4
  1530.  dc.w val+5
  1531.  dc.w val+6
  1532.  dc.w val+7
  1533. val SET val+258*16
  1534.  ENDR
  1535.  
  1536. CLROPTSCRN:
  1537.  
  1538.  move.l #$2cdfea,d0
  1539.  move.w (a4,d0.l),d0
  1540.  add.w d0,RVAL2
  1541.  
  1542.  move.l OPTSPRADDR,a0
  1543.  lea 16(a0),a1
  1544.  lea 16+(258*16)(a0),a2
  1545.  lea 16+(258*16*2)(a0),a3
  1546.  lea 16+(258*16*3)(a0),a4
  1547.  lea 258*16(a4),a0
  1548.  
  1549.  move.w #256,d0
  1550.  moveq #0,d1
  1551. CLRLOP:
  1552.  move.l d1,(a0)+
  1553.  move.l d1,(a0)+
  1554.  move.l d1,(a0)+
  1555.  move.l d1,(a0)+
  1556.  move.l d1,(a1)+
  1557.  move.l d1,(a1)+
  1558.  move.l d1,(a1)+
  1559.  move.l d1,(a1)+
  1560.  move.l d1,(a2)+
  1561.  move.l d1,(a2)+
  1562.  move.l d1,(a2)+
  1563.  move.l d1,(a2)+
  1564.  move.l d1,(a3)+
  1565.  move.l d1,(a3)+
  1566.  move.l d1,(a3)+
  1567.  move.l d1,(a3)+
  1568.  move.l d1,(a4)+
  1569.  move.l d1,(a4)+
  1570.  move.l d1,(a4)+
  1571.  move.l d1,(a4)+
  1572.  dbra d0,CLRLOP
  1573.  
  1574.  move.l OPTSPRADDR,a0
  1575.  move.w #44*256+64,(a0)
  1576.  move.w #44*256+2,8(a0)
  1577.  add.l #258*16,a0
  1578.  
  1579.  move.w #44*256+96,(a0)
  1580.  move.w #44*256+2,8(a0)
  1581.  add.l #258*16,a0
  1582.  
  1583.  move.w #44*256+128,(a0)
  1584.  move.w #44*256+2,8(a0)
  1585.  add.l #258*16,a0
  1586.  
  1587.  move.w #44*256+160,(a0)
  1588.  move.w #44*256+2,8(a0)
  1589.  add.l #258*16,a0
  1590.  
  1591.  move.w #44*256+192,(a0)
  1592.  move.w #44*256+2,8(a0)
  1593.  
  1594.  rts
  1595.  
  1596. DRAWOPTSCRN:
  1597.  
  1598.  bsr CLROPTSCRN
  1599.  
  1600. JUSTDRAWIT:
  1601.  
  1602.  move.l #font,a0
  1603.  move.l #MENUDATA,a1
  1604.  move.w OptScrn,d0
  1605.  move.l (a1,d0.w*8),a1
  1606.  
  1607.  move.l OPTSPRADDR,a3
  1608.  add.l #16,a3
  1609.  moveq #0,d2
  1610.  
  1611.  move.w #31,d0
  1612. linelop:
  1613.  move.w #39,d1
  1614.  move.l #SCRTOSPR,a4
  1615.  move.l a3,a2
  1616. charlop:
  1617.  move.b (a1)+,d2
  1618.  lea (a0,d2.w*8),a5
  1619.  move.b (a5)+,(a2)
  1620.  move.b (a5)+,16(a2)
  1621.  move.b (a5)+,32(a2)
  1622.  move.b (a5)+,48(a2)
  1623.  move.b (a5)+,64(a2)
  1624.  move.b (a5)+,80(a2)
  1625.  move.b (a5)+,96(a2)
  1626.  move.b (a5),112(a2)
  1627.  add.w (a4)+,a2
  1628.  dbra d1,charlop
  1629.  add.w #16*8,a3
  1630.  dbra d0,linelop
  1631.  
  1632.  rts
  1633.   
  1634. SCRTOSPR:
  1635.  dc.w 1,1,1,1,1,1,1,258*16-7
  1636.  dc.w 1,1,1,1,1,1,1,258*16-7
  1637.  dc.w 1,1,1,1,1,1,1,258*16-7
  1638.  dc.w 1,1,1,1,1,1,1,258*16-7
  1639.  dc.w 1,1,1,1,1,1,1,258*16-7
  1640.  dc.w 1,1,1,1,1,1,1,258*16-7
  1641.   
  1642. OPTNUM: dc.w 0
  1643. OptScrn: dc.w 0
  1644.  
  1645. MENUDATA:
  1646. ;0
  1647.  dc.l ONEPLAYERMENU_TXT
  1648.  dc.l ONEPLAYERMENU_OPTS
  1649. ;1
  1650.  dc.l INSTRUCTIONS_TXT
  1651.  dc.l INSTRUCTIONS_OPTS
  1652. ;2
  1653.  dc.l CREDITMENU_TXT
  1654.  dc.l CREDITMENU_OPTS
  1655. ;3
  1656.  dc.l ASKFORDISK_TXT
  1657.  dc.l ASKFORDISK_OPTS
  1658. ;4
  1659. ; dc.l ONEPLAYERMENU_TXT
  1660. ; dc.l ONEPLAYERMENU_OPTS
  1661.  dc.l MASTERPLAYERMENU_TXT
  1662.  dc.l MASTERPLAYERMENU_OPTS
  1663. ;5
  1664.  dc.l SLAVEPLAYERMENU_TXT
  1665.  dc.l SLAVEPLAYERMENU_OPTS
  1666. ;6
  1667.  dc.l CONTROL_TXT
  1668.  dc.l CONTROL_OPTS
  1669. ;7
  1670.  dc.l PROTMENU_TXT
  1671.  dc.l CONTROL_OPTS
  1672.  
  1673. ASKFORDISK_TXT:
  1674. ;      0123456789012345678901234567890123456789
  1675.  dc.b '                                        ' ;0
  1676.  dc.b '                                        ' ;1
  1677.  dc.b '                                        ' ;2
  1678.  dc.b '                                        ' ;3
  1679.  dc.b '                                        ' ;4
  1680.  dc.b '                                        ' ;5
  1681.  dc.b '                                        ' ;6
  1682.  dc.b '                                        ' ;7
  1683.  dc.b '                                        ' ;8
  1684.  dc.b '                                        ' ;9
  1685.  dc.b '                                        ' ;0
  1686.  dc.b '                                        ' ;1
  1687.  dc.b '                                        ' ;2
  1688.  dc.b '          INSERT LEVEL DISK             ' ;3
  1689.  dc.b '                                        ' ;4
  1690.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  1691.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  1692.  dc.b '               FINISHES                 ' ;7
  1693.  dc.b '                                        ' ;8
  1694.  dc.b '                                        ' ;9
  1695.  dc.b '                                        ' ;0
  1696.  dc.b '                                        ' ;1
  1697.  dc.b '                                        ' ;2
  1698.  dc.b '                                        ' ;3
  1699.  dc.b '                                        ' ;4
  1700.  dc.b '                                        ' ;5
  1701.  dc.b '                                        ' ;6
  1702.  dc.b '                                        ' ;7
  1703.  dc.b '                                        ' ;8
  1704.  dc.b '                                        ' ;9
  1705.  dc.b '                                        ' ;0
  1706.  dc.b '                                        ' ;1
  1707.  
  1708. ASKFORDISK_OPTS:
  1709.  dc.w -1
  1710.  
  1711.  
  1712. ONEPLAYERMENU_TXT:
  1713. ;      0123456789012345678901234567890123456789
  1714.  dc.b '                                        ' ;0
  1715.  dc.b '                                        ' ;1
  1716.  dc.b '                                        ' ;2
  1717.  dc.b '                                        ' ;3
  1718.  dc.b '                                        ' ;4
  1719.  dc.b '                                        ' ;5
  1720.  dc.b '                                        ' ;6
  1721.  dc.b '                                        ' ;7
  1722.  dc.b '                                        ' ;8
  1723.  dc.b '                                        ' ;9
  1724.  dc.b '                                        ' ;0
  1725. CURRENTLEVELLINE:
  1726.  dc.b '         *** A.F DEMO LEVEL ***         ' ;1 
  1727.  dc.b '                                        ' ;2
  1728.  dc.b '                1 PLAYER                ' ;3
  1729.  dc.b '                                        ' ;4
  1730.  dc.b '               PLAY  GAME               ' ;5
  1731.  dc.b '                                        ' ;6
  1732.  dc.b '            CONTROL  OPTIONS            ' ;7
  1733.  dc.b '                                        ' ;8
  1734.  dc.b '              GAME CREDITS              ' ;9
  1735.  dc.b '                                        ' ;0
  1736.  dc.b '                PASSWORD                ' ;1
  1737.  dc.b '                                        ' ;2
  1738. PASSWORDLINE:
  1739.  dc.b '                                        ' ;3
  1740.  dc.b '                                        ' ;4
  1741.  dc.b '                  QUIT                  ' ;5
  1742.  dc.b '                                        ' ;6
  1743.  dc.b '                                        ' ;7
  1744.  dc.b '                                        ' ;8
  1745.  dc.b '                                        ' ;9
  1746.  dc.b '                                        ' ;0
  1747.  dc.b '                                        ' ;1
  1748.  
  1749. ONEPLAYERMENU_OPTS:
  1750.  dc.w 16,13,8,1
  1751.  dc.w 15,15,10,1
  1752.  dc.w 12,17,16,1
  1753.  dc.w 14,19,12,1
  1754.  dc.w 12,23,16,1
  1755.  dc.w 18,25,4,1
  1756.  dc.w -1
  1757.  
  1758.  
  1759. MASTERPLAYERMENU_TXT:
  1760. ;      0123456789012345678901234567890123456789
  1761.  dc.b '                                        ' ;0
  1762.  dc.b '                                        ' ;1
  1763.  dc.b '                                        ' ;2
  1764.  dc.b '                                        ' ;3
  1765.  dc.b '                                        ' ;4
  1766.  dc.b '                                        ' ;5
  1767.  dc.b '                                        ' ;6
  1768.  dc.b '                                        ' ;7
  1769.  dc.b '                                        ' ;8
  1770.  dc.b '                                        ' ;9
  1771.  dc.b '                                        ' ;0
  1772.  dc.b '                                        ' ;1
  1773.  dc.b '            2 PLAYER  MASTER            ' ;2
  1774.  dc.b '                                        ' ;3
  1775. CURRENTLEVELLINEM:
  1776.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  1777.  dc.b '                                        ' ;5
  1778.  dc.b '               PLAY  GAME               ' ;6
  1779.  dc.b '                                        ' ;7
  1780.  dc.b '            CONTROL  OPTIONS            ' ;8
  1781.  dc.b '                                        ' ;9
  1782.  dc.b '                                        ' ;0
  1783.  dc.b '                                        ' ;1
  1784.  dc.b '                                        ' ;2
  1785.  dc.b '                                        ' ;3
  1786.  dc.b '                                        ' ;4
  1787.  dc.b '                                        ' ;5
  1788.  dc.b '                                        ' ;6
  1789.  dc.b '                                        ' ;7
  1790.  dc.b '                                        ' ;8
  1791.  dc.b '                                        ' ;9
  1792.  dc.b '                                        ' ;0
  1793.  dc.b '                                        ' ;1
  1794.  
  1795. MASTERPLAYERMENU_OPTS:
  1796.  dc.w 12,12,16,1
  1797.  dc.w 6,14,28,1
  1798.  dc.w 15,16,10,1
  1799.  dc.w 12,18,16,1
  1800.  dc.w -1
  1801.  
  1802. SLAVEPLAYERMENU_TXT:
  1803. ;      0123456789012345678901234567890123456789
  1804.  dc.b '                                        ' ;0
  1805.  dc.b '                                        ' ;1
  1806.  dc.b '                                        ' ;2
  1807.  dc.b '                                        ' ;3
  1808.  dc.b '                                        ' ;4
  1809.  dc.b '                                        ' ;5
  1810.  dc.b '                                        ' ;6
  1811.  dc.b '                                        ' ;7
  1812.  dc.b '                                        ' ;8
  1813.  dc.b '                                        ' ;9
  1814.  dc.b '                                        ' ;9
  1815.  dc.b '                                        ' ;1
  1816.  dc.b '             2 PLAYER SLAVE             ' ;4
  1817.  dc.b '                                        ' ;3
  1818.  dc.b '               PLAY  GAME               ' ;2
  1819.  dc.b '                                        ' ;5
  1820.  dc.b '            CONTROL  OPTIONS            ' ;0
  1821.  dc.b '                                        ' ;1
  1822.  dc.b '                                        ' ;3
  1823.  dc.b '                                        ' ;7
  1824.  dc.b '                                        ' ;7
  1825.  dc.b '                                        ' ;3
  1826.  dc.b '                                        ' ;3
  1827.  dc.b '                                        ' ;3
  1828.  dc.b '                                        ' ;4
  1829.  dc.b '                                        ' ;5
  1830.  dc.b '                                        ' ;6
  1831.  dc.b '                                        ' ;7
  1832.  dc.b '                                        ' ;9
  1833.  dc.b '                                        ' ;9
  1834.  dc.b '                                        ' ;9
  1835.  dc.b '                                        ' ;9
  1836.  
  1837.  
  1838. PROTMENU_TXT:
  1839. ;      0123456789012345678901234567890123456789
  1840.  dc.b '                                        ' ;0
  1841.  dc.b '                                        ' ;1
  1842.  dc.b '                                        ' ;2
  1843.  dc.b '                                        ' ;3
  1844.  dc.b '                                        ' ;4
  1845.  dc.b '                                        ' ;5
  1846.  dc.b '                                        ' ;6
  1847.  dc.b '                                        ' ;7
  1848.  dc.b '                                        ' ;8
  1849.  dc.b '                                        ' ;9
  1850.  dc.b '                                        ' ;0
  1851.  dc.b '                                        ' ;1
  1852.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  1853.  dc.b '                                        ' ;3
  1854. PROTLINE:
  1855.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  1856.  dc.b '                                        ' ;5
  1857.  dc.b '                                        ' ;6
  1858.  dc.b '                                        ' ;7
  1859.  dc.b '                                        ' ;8
  1860.  dc.b '                                        ' ;9
  1861.  dc.b '                                        ' ;0
  1862.  dc.b '                                        ' ;1
  1863.  dc.b '                                        ' ;2
  1864.  dc.b '                                        ' ;3
  1865.  dc.b '                                        ' ;4
  1866.  dc.b '                                        ' ;5
  1867.  dc.b '                                        ' ;6
  1868.  dc.b '                                        ' ;7
  1869.  dc.b '                                        ' ;9
  1870.  dc.b '                                        ' ;0
  1871.  dc.b '                                        ' ;1
  1872.  
  1873.  
  1874.  
  1875. SLAVEPLAYERMENU_OPTS:
  1876.  dc.w 12,12,16,1
  1877.  dc.w 15,14,10,1
  1878.  dc.w 12,16,16,1
  1879.  dc.w -1
  1880.  
  1881.  
  1882. PLAYER_OPTS:
  1883. ;      0123456789012345678901234567890123456789
  1884.  dc.b '                 1 PLAYER               '
  1885.  dc.b '             2  PLAYER MASTER           '
  1886.  dc.b '              2 PLAYER SLAVE            '
  1887.  
  1888. LEVEL_OPTS:
  1889. ;      0123456789012345678901234567890123456789
  1890.  dc.b '      LEVEL  1 :          THE GATE      '
  1891.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  1892.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  1893.  dc.b '      LEVEL  4 :     THE COURTYARD      '
  1894.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  1895.  dc.b '      LEVEL  6 :         THE MINES      '
  1896.  dc.b '      LEVEL  7 :       THE FURNACE      '
  1897.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  1898.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  1899.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  1900.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  1901.  dc.b '      LEVEL 12 :           THE PIT      '
  1902.  dc.b '      LEVEL 13 :            STRATA      '
  1903.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  1904.  dc.b '      LEVEL 15 :     COOLING TOWER      '
  1905.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  1906.  
  1907. CONTROL_TXT:
  1908. ;      0123456789012345678901234567890123456789
  1909.  dc.b '                                        ' ;0
  1910.  dc.b '                                        ' ;1
  1911.  dc.b '                                        ' ;2
  1912.  dc.b '                                        ' ;3
  1913.  dc.b '            DEFINE  CONTROLS            ' ;4
  1914.  dc.b '                                        ' ;5
  1915. KEY_LINES:
  1916.  dc.b '     TURN LEFT                  LCK     ' ;6
  1917.  dc.b '     TURN RIGHT                 RCK     ' ;7
  1918.  dc.b '     FORWARDS                   UCK     ' ;8
  1919.  dc.b '     BACKWARDS                  DCK     ' ;9
  1920.  dc.b '     FIRE                       RAL     ' ;0
  1921.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;1
  1922.  dc.b '     RUN                        RSH     ' ;2
  1923.  dc.b '     FORCE SIDESTEP             RAM     ' ;3
  1924.  dc.b '     SIDESTEP LEFT               .      ' ;4
  1925.  dc.b '     SIDESTEP RIGHT              /      ' ;5
  1926.  dc.b '     DUCK                        D      ' ;6
  1927.  dc.b '     LOOK BEHIND                 L      ' ;7
  1928.  dc.b '                                        ' ;8
  1929.  dc.b '             OTHER CONTROLS             ' ;9
  1930.  dc.b '                                        ' ;0
  1931.  dc.b ' PULSE RIFLE      1  PAUSE            P ' ;1
  1932.  dc.b ' SHOTGUN          2  QUIT           ESC ' ;2
  1933.  dc.b ' PLASMA GUN       3  MOUSE CONTROL    M ' ;3
  1934.  dc.b ' GRENADE LAUNCHER 4  JOYSTICK CONTROL J ' ;4
  1935.  dc.b ' ROCKET LAUNCHER  5  KEYBOARD CONTROL K ' ;5
  1936.  dc.b '                                        ' ;6
  1937.  dc.b '               MAIN  MENU               ' ;7
  1938.  dc.b '                                        ' ;8
  1939.  dc.b '                                        ' ;9
  1940.  dc.b '                                        ' ;0
  1941.  dc.b '                                        ' ;1
  1942.  
  1943. CONTROL_OPTS:
  1944.  dc.w 5,6,30,1
  1945.  dc.w 5,7,30,1
  1946.  dc.w 5,8,30,1
  1947.  dc.w 5,9,30,1
  1948.  dc.w 5,10,30,1
  1949.  dc.w 5,11,30,1
  1950.  dc.w 5,12,30,1
  1951.  dc.w 5,13,30,1
  1952.  dc.w 5,14,30,1
  1953.  dc.w 5,15,30,1
  1954.  dc.w 5,16,30,1
  1955.  dc.w 5,17,30,1
  1956.  dc.w 15,27,10,1
  1957.  dc.w -1
  1958.  
  1959. PLOPT: dc.w 0
  1960.  
  1961. INSTRUCTIONS_TXT:
  1962. ;      0123456789012345678901234567890123456789
  1963.  dc.b 'Main controls:                          ' ;1
  1964.  dc.b '                                        ' ;2
  1965.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  1966.  dc.b '            Turn left / right           ' ;4
  1967.  dc.b '          Right Alt = Fire              ' ;5
  1968.  dc.b '        Right Shift = Run               ' ;6
  1969.  dc.b '                  > = Slide Left        ' ;7
  1970.  dc.b '                  ? = Slide Right       ' ;8
  1971.  dc.b '              SPACE = Operate Door/Lift ' ;9
  1972.  dc.b '                  D = Duck              ' ;0
  1973.  dc.b '                  J = Joystick Control  ' ;1
  1974.  dc.b '                  K = Keyboard Control  ' ;2
  1975.  dc.b '                                        ' ;3
  1976.  dc.b '              1,2,3 = Select weapon     ' ;4
  1977.  dc.b '              ENTER = Toggle screen size' ;5
  1978.  dc.b '                ESC = Quit              ' ;6
  1979.  dc.b '                                        ' ;7
  1980.  dc.b '                                        ' ;8
  1981.  dc.b 'The one player game has no objective and' ;9
  1982.  dc.b 'the only way to finish is to die or quit' ;0
  1983.  dc.b '                                        ' ;1
  1984.  dc.b 'The two-player game is supposed to be a ' ;2
  1985.  dc.b 'fight to the death but will probably be ' ;3
  1986.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  1987.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  1988.  dc.b '                                        ' ;6
  1989.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  1990.  dc.b 'have glowing red walls and overhead     ' ;8
  1991.  dc.b 'lights. Useful for getting behind your  ' ;9
  1992.  dc.b ' opponent!                              ' ;0
  1993.  dc.b '  Just a taster of what is to come....  ' ;1
  1994.  dc.b '                                        ' ;0
  1995.  
  1996. INSTRUCTIONS_OPTS:
  1997.  dc.w 0,0,0,1
  1998.  dc.w -1
  1999.  
  2000. CREDITMENU_TXT:
  2001.  
  2002. ;      0123456789012345678901234567890123456789
  2003.  dc.b '    Programming, Game Code, Graphics    ' ;0
  2004.  dc.b '         Game Design and Manual         ' ;1
  2005.  dc.b '            Andrew Clitheroe            ' ;2
  2006.  dc.b '                                        ' ;3
  2007.  dc.b '             Alien Graphics             ' ;4
  2008.  dc.b '             Michael  Green             ' ;5
  2009.  dc.b '                                        ' ;6
  2010.  dc.b '           3D Object Designer           ' ;7
  2011.  dc.b '            Charles Blessing            ' ;8
  2012.  dc.b '                                        ' ;9
  2013.  dc.b '              Level Design              ' ;0
  2014.  dc.b 'Michael Green  Ben Chanter   Jackie Lang' ;1
  2015.  dc.b '     Kai Barrett Charles Blessing       ' ;2
  2016.  dc.b '                                        ' ;3
  2017.  dc.b '           Creative  Director           ' ;4
  2018.  dc.b '              Martyn Brown              ' ;5
  2019.  dc.b '                                        ' ;6
  2020.  dc.b '       Project Manager and Manual       ' ;7
  2021.  dc.b "            Martin O'Donnell            " ;8
  2022.  dc.b '                                        ' ;9
  2023.  dc.b '              Music + SFX               ' ;0
  2024.  dc.b '              Bjorn Lynne               ' ;1
  2025.  dc.b '                                        ' ;2
  2026.  dc.b '      Cover Illustration and Logo       ' ;3
  2027.  dc.b '             Kevin Jenkins              ' ;4
  2028.  dc.b '                                        ' ;5
  2029.  dc.b '      Packaging and Manual Design       ' ;6
  2030.  dc.b '               Paul Sharp               ' ;7
  2031.  dc.b '                                        ' ;8
  2032.  dc.b '             QA and Playtest            ' ;9
  2033.  dc.b '           Phil and The Wolves          ' ;0
  2034.  dc.b '                                        ' ;1
  2035.  
  2036.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  2037.  dc.b '                   by                   ' ;5
  2038.  dc.b '            Charles Blessing            ' ;6
  2039.  dc.b '                                        ' ;7
  2040.  dc.b '                Graphics:               ' ;8
  2041.  dc.b '                   by                   ' ;9
  2042.  dc.b '              Mike  Oakley              ' ;0
  2043.  dc.b '                                        ' ;1
  2044.  dc.b '             Title  Picture             ' ;2
  2045.  dc.b '                   by                   ' ;3
  2046.  dc.b '               Mike Green               ' ;4
  2047.  dc.b '                                        ' ;5
  2048.  dc.b ' Inspiration, incentive, moral support, ' ;6
  2049.  dc.b '     level design and plenty of tea     ' ;7
  2050.  dc.b '         generously supplied by         ' ;8
  2051.  dc.b '                                        ' ;9
  2052.  dc.b '              Jackie  Lang              ' ;0
  2053.  dc.b '                                        ' ;1
  2054.  dc.b '    Music for the last demo composed    ' ;2
  2055.  dc.b '       by the inexpressibly evil:       ' ;3
  2056.  dc.b '                                        ' ;8
  2057.  dc.b '            *BAD* BEN CHANTER           ' ;9
  2058.  dc.b '                                        ' ;0
  2059.  dc.b '    Sadly no room for music this time   ' ;1
  2060.  dc.b '                                        ' ;7
  2061.  dc.b '                                        ' ;7
  2062.  
  2063. CREDITMENU_OPTS:
  2064.  dc.w 0,0,1,1
  2065.  dc.w -1
  2066.  
  2067.  
  2068. ;      0123456789012345678901234567890123456789
  2069.  dc.b '                                        ' ;0
  2070.  dc.b '                                        ' ;1
  2071.  dc.b '                                        ' ;2
  2072.  dc.b '                                        ' ;3
  2073.  dc.b '                                        ' ;4
  2074.  dc.b '                                        ' ;5
  2075.  dc.b '                                        ' ;6
  2076.  dc.b '                                        ' ;7
  2077.  dc.b '                                        ' ;8
  2078.  dc.b '                                        ' ;9
  2079.  dc.b '                                        ' ;0
  2080.  dc.b '                                        ' ;1
  2081.  dc.b '                                        ' ;2
  2082.  dc.b '                                        ' ;3
  2083.  dc.b '                                        ' ;4
  2084.  dc.b '                                        ' ;5
  2085.  dc.b '                                        ' ;6
  2086.  dc.b '                                        ' ;7
  2087.  dc.b '                                        ' ;8
  2088.  dc.b '                                        ' ;9
  2089.  dc.b '                                        ' ;0
  2090.  dc.b '                                        ' ;1
  2091.  dc.b '                                        ' ;2
  2092.  dc.b '                                        ' ;3
  2093.  dc.b '                                        ' ;4
  2094.  dc.b '                                        ' ;5
  2095.  dc.b '                                        ' ;6
  2096.  dc.b '                                        ' ;7
  2097.  dc.b '                                        ' ;8
  2098.  dc.b '                                        ' ;9
  2099.  dc.b '                                        ' ;0
  2100.  dc.b '                                        ' ;1
  2101.  
  2102.  
  2103. ********************************************************
  2104.  
  2105. PUTIN32:
  2106.  move.w #31,d2
  2107. p32loop:
  2108.  moveq #0,d5
  2109.  move.l (a0)+,d3
  2110.  move.w d3,d4
  2111.  swap d3
  2112.  move.b d4,d5
  2113.  lsr.w #8,d4
  2114.  
  2115.  muls d0,d3
  2116.  muls d0,d4
  2117.  muls d0,d5
  2118.  lsr.l #8,d3
  2119.  lsr.l #8,d4
  2120.  lsr.l #8,d5
  2121.  move.w d3,d6
  2122.  swap d3
  2123.  move.w d6,d3
  2124.  move.w d4,d6
  2125.  swap d4
  2126.  move.w d6,d4
  2127.  move.w d5,d6
  2128.  swap d5
  2129.  move.w d6,d5
  2130.  and.w #%11110000,d3
  2131.  and.w #%11110000,d4
  2132.  and.w #%11110000,d5
  2133.  lsl.w #4,d3
  2134.  add.w d4,d3
  2135.  lsr.w #4,d5
  2136.  add.w d5,d3
  2137.  move.w d3,2(a1)
  2138.  swap d3
  2139.  swap d4
  2140.  swap d5
  2141.  and.w #%1111,d3
  2142.  and.w #%1111,d4
  2143.  and.w #%1111,d5
  2144.  lsl.w #8,d3
  2145.  lsl.w #4,d4
  2146.  add.w d4,d3
  2147.  add.w d5,d3
  2148.  move.w d3,2+(132*4)(a1)
  2149.  addq #4,a1
  2150.  dbra d2,p32loop
  2151.  
  2152.  
  2153.  rts
  2154.  
  2155. **************************************
  2156.  
  2157. FADEAMOUNT: dc.w 0
  2158. FADEVAL: dc.w 0
  2159.  
  2160. FADEUPTITLE:
  2161.  
  2162.  move.w FADEVAL,d0
  2163.  move.w FADEAMOUNT,d1
  2164. fadeuploop:
  2165.  
  2166.  move.l #TITLEPAL,a0
  2167.  move.l #TITLEPALCOP,a1
  2168.  
  2169. wvb:
  2170.  btst #5,$dff000+intreqrl
  2171.  beq.s wvb
  2172.  move.w #$20,$dff000+intreq 
  2173.  
  2174.  bsr PUTIN32
  2175.  add.w #4,a1
  2176.  bsr PUTIN32
  2177.  add.w #4,a1
  2178.  bsr PUTIN32
  2179.  add.w #4,a1
  2180.  bsr PUTIN32
  2181.  
  2182.  addq.w #4,d0
  2183.  dbra d1,fadeuploop
  2184.  
  2185.  subq #4,d0
  2186.  move.w d0,FADEVAL
  2187.  
  2188.  rts
  2189.  
  2190. CLEARTITLEPAL:
  2191.  PRSDP
  2192.  move.l #TITLEPALCOP,a0
  2193.  move.w #7,d1
  2194. clrpal:
  2195.  move.w #31,d0
  2196. clr32
  2197.  move.w #0,2(a0)
  2198.  addq #4,a0
  2199.  dbra d0,clr32
  2200.  addq #4,a0
  2201.  dbra d1,clrpal
  2202.  PRSDQ
  2203.  rts
  2204.  
  2205. FADEDOWNTITLE:
  2206.  
  2207.  move.w FADEVAL,d0
  2208.  move.w FADEAMOUNT,d1
  2209. fadedownloop:
  2210.  
  2211.  move.l #TITLEPAL,a0
  2212.  move.l #TITLEPALCOP,a1
  2213.  
  2214. .wvb:
  2215.  btst #5,$dff000+intreqrl
  2216.  beq.s .wvb
  2217.  move.w #$20,$dff000+intreq 
  2218.  
  2219.  bsr PUTIN32
  2220.  add.w #4,a1
  2221.  bsr PUTIN32
  2222.  add.w #4,a1
  2223.  bsr PUTIN32
  2224.  add.w #4,a1
  2225.  bsr PUTIN32
  2226.  
  2227.  subq.w #4,d0
  2228.  dbra d1,fadedownloop
  2229.  
  2230.  addq #4,d0
  2231.  move.w d0,FADEVAL
  2232.  
  2233.  rts
  2234.  
  2235. LOADTITLESCRN2:
  2236.  
  2237.  
  2238.  move.l #MEMF_CLEAR,d1
  2239.  move.l #52400,d0
  2240.  move.l 4.w,a6
  2241.  jsr    _LVOAllocMem(a6)
  2242.  tst.l  d0
  2243.  beq    .nomem
  2244.  
  2245.  move.l d0,tempptr
  2246.  
  2247.  move.l #TITLESCRNNAME2,d1
  2248.  move.l #1005,d2
  2249.  move.l doslib,a6
  2250.  jsr -30(a6)
  2251.  move.l d0,handle
  2252.  move.l d0,d1
  2253.  move.l doslib,a6
  2254. ; move.l TITLESCRNADDR,d2
  2255.  move.l tempptr,d2
  2256.  move.l #10240*7,d3
  2257.  jsr -42(a6)
  2258.  move.l doslib,a6
  2259.  move.l handle,d1
  2260.  jsr -36(a6)
  2261.  
  2262.     
  2263.  move.l TITLESCRNADDR,a0
  2264.  move.l tempptr,d0
  2265.  
  2266.  moveq #0,d1
  2267.  lea WorkSpace,a1
  2268.  lea $0,a2
  2269.  jsr unLHA
  2270.  
  2271.   move.l tempptr,a1
  2272.  move.l #52400,d0
  2273.  CALLEXEC FreeMem
  2274.   
  2275. .nomem
  2276.  
  2277.  rts
  2278.  
  2279. tempptr dc.l 0
  2280.  
  2281.  
  2282. GETTITLEMEM:
  2283. ; move.l #2,d1
  2284. ; move.l #10240*7,d0
  2285. ; move.l 4.w,a6
  2286. ; jsr -198(a6)
  2287. ; move.l d0,TITLESCRNADDR
  2288.  move.l #$dff000-$2cdfe4,a4
  2289.  
  2290.  move.l #2,d1
  2291.  move.l #258*16*5,d0
  2292.  move.l 4.w,a6
  2293.  jsr -198(a6)
  2294.  move.l d0,OPTSPRADDR
  2295.  
  2296.  rts
  2297.  
  2298. ProtChkJLev1:
  2299.  
  2300. PROTSETUP:
  2301.  incbin "ab3:includes/protsetupenc"
  2302.  
  2303. ; Need to: Decode protection calling
  2304. ; routine
  2305. ; use null values to call it and erase
  2306. ; it from memory
  2307. ; erase this routine and return.
  2308.  
  2309. ; include "ab3:source/protsetup"
  2310.  
  2311.  
  2312. RELEASETITLEMEM:
  2313. ; move.l TITLESCRNADDR,d1
  2314. ; move.l d1,a1
  2315. ; move.l #10240*7,d0
  2316. ; move.l 4.w,a6
  2317. ; jsr -210(a6)
  2318.  
  2319.  move.l OPTSPRADDR,d1
  2320.  move.l d1,a1
  2321.  move.l #258*80,d0
  2322.  move.l 4.w,a6
  2323.  jsr -210(a6)
  2324.  rts
  2325.  
  2326.  
  2327. PROTCALLENC:
  2328. ; incbin "ab3:source/protcallenc.bin
  2329.  
  2330. ; one pass, all instructions executed.
  2331. ; must call protection routine,store
  2332. ; value somewhere, call ask routine,
  2333. ; compare returned value, if correct
  2334. ; set up all values, then return.
  2335.  
  2336.  include "ab3:source_cd32/protcallenc"
  2337.  
  2338. ENDPROT:
  2339.  
  2340. LOADTITLESCRN:
  2341.  
  2342. ; move.l #TITLESCRNNAME,d1
  2343. ; move.l #1005,d2
  2344. ; move.l doslib,a6
  2345. ; jsr -30(a6)
  2346. ; move.l d0,handle
  2347. ; move.l d0,d1
  2348. ; move.l doslib,a6
  2349. ; move.l TITLESCRNADDR,d2
  2350. ; move.l #10240*7,d3
  2351. ; jsr -42(a6)
  2352. ; move.l doslib,a6
  2353. ; move.l handle,d1
  2354. ; jsr -36(a6)
  2355.  
  2356.  rts
  2357.  
  2358. RVAL2: dc.w 0
  2359.  
  2360. SETUPTITLESCRN:
  2361.  
  2362.  rts
  2363.  
  2364.  PRSDR
  2365.  move.l #OPTCOP,a0
  2366.  move.l #rain,a1
  2367.  move.w #255,d0
  2368. putinrain:
  2369.  move.w (a1)+,d1
  2370.  move.w d1,6(a0)
  2371.  move.w d1,6+4(a0)
  2372.  move.w d1,6+8(a0)
  2373.  move.w d1,6+12(a0)
  2374.  add.w #4*14,a0
  2375.  
  2376.  dbra d0,putinrain
  2377.  
  2378. ; Put addr into copper.
  2379.  move.l OPTSPRADDR,d0
  2380.  move.w d0,tsp0l
  2381.  swap d0
  2382.  move.w d0,tsp0h
  2383.  swap d0
  2384.  add.l #258*16,d0
  2385.  move.w d0,tsp1l
  2386.  swap d0
  2387.  move.w d0,tsp1h
  2388.  swap d0
  2389.  add.l #258*16,d0
  2390.  move.w d0,tsp2l
  2391.  swap d0
  2392.  move.w d0,tsp2h
  2393.  swap d0
  2394.  add.l #258*16,d0
  2395.  move.w d0,tsp3l
  2396.  swap d0
  2397.  move.w d0,tsp3h
  2398.  swap d0
  2399.  add.l #258*16,d0
  2400.  move.w d0,tsp4l
  2401.  swap d0
  2402.  move.w d0,tsp4h
  2403.  
  2404.  move.l #nullspr,d0
  2405.  move.w d0,tsp5l
  2406.  move.w d0,tsp6l
  2407.  move.w d0,tsp7l
  2408.  swap d0
  2409.  move.w d0,tsp5h
  2410.  move.w d0,tsp6h
  2411.  move.w d0,tsp7h 
  2412.  
  2413.  move.l TITLESCRNADDR,d0
  2414.  move.w d0,ts1l
  2415.  swap d0
  2416.  move.w d0,ts1h
  2417.  swap d0
  2418.  add.l #10240,d0
  2419.  move.w d0,ts2l
  2420.  swap d0
  2421.  move.w d0,ts2h
  2422.  swap d0
  2423.  add.l #10240,d0
  2424.  move.w d0,ts3l
  2425.  swap d0
  2426.  move.w d0,ts3h
  2427.  swap d0
  2428.  add.l #10240,d0
  2429.  move.w d0,ts4l
  2430.  swap d0
  2431.  move.w d0,ts4h
  2432.  swap d0
  2433.  add.l #10240,d0
  2434.  move.w d0,ts5l
  2435.  swap d0
  2436.  move.w d0,ts5h
  2437.  swap d0
  2438.  add.l #10240,d0
  2439.  move.w d0,ts6l
  2440.  swap d0
  2441.  move.w d0,ts6h
  2442.  swap d0
  2443.  add.l #10240,d0
  2444.  move.w d0,ts7l
  2445.  swap d0
  2446.  move.w d0,ts7h
  2447.  rts 
  2448.  
  2449. RVAL1: dc.w 0
  2450.  
  2451. DummyAdds:
  2452.  dc.l dummy-78935450
  2453.  dc.l dummy-78935450
  2454.  dc.l dummy-78935450
  2455.  dc.l dummy-78935450
  2456.  dc.l dummy-78935450
  2457.  dc.l dummy-78935450
  2458.  dc.l dummy-78935450
  2459.  dc.l dummy-78935450
  2460.  dc.l dummy-78935450
  2461.  dc.l dummy-78935450
  2462.  
  2463. dummycall
  2464.  dc.w $4e75-123
  2465.  
  2466. protspace: ds.l 200
  2467.  
  2468.  include "ab3:source_4000/LEVEL_BLURB"
  2469.  
  2470. font:
  2471.  incbin "ab3:includes/OptFont"
  2472.  
  2473. rain: incbin "ab3:includes/optcop"
  2474.